package com.bw.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class BigDecimalArith {
   static DecimalFormat df= new DecimalFormat("0.00");

    public BigDecimalArith(String nulltoO) {
    }

//字符串空转换为0
    public static String nulltoO(String val){
       if(val ==null || val.equals("")){
           val="0";
       }
       return val;
   }
//增加输入3位小数的格式 konglc， 2016—10-16
    static DecimalFormat df3= new DecimalFormat("0.###");
/**
 * 提供精准加法计算的compare方法
 * v1=v1=0
 * v1<v2=-1
 * v1>v2=1;
 * */
   public static  int compare(String value1, String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       return b1.compareTo(b2);
   }
   /*
   * 提供精准加法计算的add方法
   * @param value1被加数
   * @param value2加数
   * @return两个参数的和
   * */
   public static String add(String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       df.setRoundingMode(RoundingMode.HALF_UP);
       return df.format(b1.add(b2));
   }
   /*
   * 提供精确减法运算的sub方法
   * @param value1 被减数
   * @param value2 减数
   * @return 两个参数的差
   * */
   public static String sub(String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       df.setRoundingMode(RoundingMode.HALF_UP);
       return df.format(b1.subtract(b2));
   }

   /*
   * 提供精准减法运算sub方法，保留3位小数
   * @param value1 被减数
   * @param value2 减数
   * @return 两个参数的差
   * */
   public static String subAndReturn3Diggit(String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       return df3.format(b1.subtract(b2));

   }
   /*
   * 提供精准乘法的mull方法
   * @param value1被乘法
   * @param value2乘法
   * @return 两个参数的乘
   * */
   public static String mul(String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       df.setRoundingMode(RoundingMode.HALF_UP);
       return df.format(b1.multiply(b2));
   }

   /*
   * 提供精准的除法运算方法div
   * @param value1 被除数
   * @param value2 被数
   * @return 两个参数的商
   * @throws IllegalAccessException
   * */
   public static String div(String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       df.setRoundingMode(RoundingMode.HALF_UP);
       return  df.format(b1.divide(b2,2,BigDecimal.ROUND_HALF_EVEN));
   }


   /*
   * 提供精准的除法运算方法div取值取值取值
   * @param value1 被除数
   * @param value2 除数
   * @return 取值
   * @throws IllegalAccessExecption
   * */
   public static String divide (String value1,String value2){
       BigDecimal b1 = new BigDecimal(nulltoO(value1));
       BigDecimal b2 = new BigDecimal(nulltoO(value2));
       return String.valueOf(b1.divide(b2,0,BigDecimal.ROUND_FLOOR));
   }

    public static void main(String[] args) {
        System.out.println(mul("22","2"));
    }
}
